
https://rss.onlinelibrary.wiley.com/doi/10.1111/j.1740-9713.2018.01169.x
R paketleri
Paketleri nereden bulabiliriz
Kendi paket evrenini oluştur
R paket yükleme
install.packages("tidyverse", dependencies = TRUE)
install.packages("jmv", dependencies = TRUE)
install.packages("questionr", dependencies = TRUE)
install.packages("Rcmdr", dependencies = TRUE)
install.packages("summarytools")
Veriyi görüntüleme
View(data)
data
head
tail
glimpse
str
skimr::skim()
Veriyi değiştirme
Veriyi kod ile değiştirelim
Veriyi eklentilerle değiştirme

Basit tanımlayıcı istatistikler
summary()
mean
median
min
max
sd
table()
library(readr)
irisdata <- read_csv("data/iris.csv")
jmv::descriptives(
data = irisdata,
vars = "Sepal.Length",
splitBy = "Species",
freq = TRUE,
hist = TRUE,
dens = TRUE,
bar = TRUE,
box = TRUE,
violin = TRUE,
dot = TRUE,
mode = TRUE,
sum = TRUE,
sd = TRUE,
variance = TRUE,
range = TRUE,
se = TRUE,
skew = TRUE,
kurt = TRUE,
quart = TRUE,
pcEqGr = TRUE)
skimr
library(skimr)
skim(df)
DataExplorer
library(DataExplorer)
DataExplorer::create_report(df)

Grafikler
descr(tobacco, style = 'rmarkdown')
print(descr(tobacco), method = 'render', table.classes = 'st-small')
dfSummary(tobacco, style = 'grid', plain.ascii = FALSE)
print(dfSummary(tobacco, graph.magnif = 0.75), method = 'render')

Sonraki Konular
- RStudio ile GitHub
- Hipotez testleri
- R Markdown ve R Notebook ile tekrarlanabilir rapor
LS0tCnRpdGxlOiBSIGlsZSBhbmFsaXplIGJhxZ9sYXJrZW5eW0J1IGJpciBkZXJsZW1lZGlyLCBtw7xta8O8biBtZXJ0ZWJlIGFsxLFudMSxbGFyYSByZWZlcmFucwogIHZlcm1leWUgw6dhbMSxxZ90xLFtLl0KYXV0aG9yOiAiRGVybGV5ZW4gW1NlcmRhciBCYWxjxLEsIE1ELCBQYXRob2xvZ2lzdF0oaHR0cHM6Ly9zYmFsY2kuZ2l0aHViLmlvLykiCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSlgIgpvdXRwdXQ6CiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246CiAgICBoaWdobGlnaHQ6IGthdGUKICBodG1sX25vdGVib29rOgogICAgZmlnX2NhcHRpb246IHllcwogICAgaGlnaGxpZ2h0OiBrYXRlCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdGhlbWU6IGZsYXRseQogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNQogICAgdG9jX2Zsb2F0OiB5ZXMKICBwZGZfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiAnNScKICBodG1sX2RvY3VtZW50OiAKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIGtlZXBfbWQ6IHllcwogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNQogICAgdG9jX2Zsb2F0OiB5ZXMKLS0tCgoKCmBgYHtyIGtuaXRyX2luaXQsIGVjaG89RkFMU0UsIGNhY2hlPUZBTFNFfQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KHJtZGZvcm1hdHMpCgojIyBHbG9iYWwgb3B0aW9ucwpvcHRpb25zKG1heC5wcmludD0iNzUiKQpvcHRzX2NodW5rJHNldChlY2hvPUZBTFNFLAoJICAgICAgICAgICAgIGNhY2hlPVRSVUUsCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwKICAgICAgICAgICAgICAgdGlkeT1UUlVFLAogICAgICAgICAgICAgICBjb21tZW50PU5BLAogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLAogICAgICAgICAgICAgICB3YXJuaW5nPUZBTFNFKQpvcHRzX2tuaXQkc2V0KHdpZHRoPTc1KQpgYGAKCgoKLQoKPCEtLSBPcGVuIGFsbCBsaW5rcyBpbiBuZXcgdGFiLS0+ICAKPGJhc2UgdGFyZ2V0PSJfYmxhbmsiLz4gICAKCgo8IS0tIEdvIHRvIHd3dy5hZGR0aGlzLmNvbS9kYXNoYm9hcmQgdG8gY3VzdG9taXplIHlvdXIgdG9vbHMgLS0+IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii8vczcuYWRkdGhpcy5jb20vanMvMzAwL2FkZHRoaXNfd2lkZ2V0LmpzI3B1YmlkPXJhLTViYzM2OTAwYTQwNTA5MGIiPiAgCjwvc2NyaXB0PiAKCgoKClshW10oaHR0cDovL3Jlcy5jbG91ZGluYXJ5LmNvbS9keWQ5MTFrbWgvaW1hZ2UvdXBsb2FkL2ZfYXV0byxxX2F1dG86YmVzdC92MTUzMDExMzA3Ny9JbWFnZV8yX3ZmeTQ4Yi5wbmcpXShodHRwczovL3d3dy5kYXRhY2FtcC5jb20vY29tbXVuaXR5L3R1dG9yaWFscy9kYXRhLXNjaWVuY2UtcGl0ZmFsbHMpCgoKLSBSIGdlbmVyYXRpb24KCmh0dHBzOi8vcnNzLm9ubGluZWxpYnJhcnkud2lsZXkuY29tL2RvaS8xMC4xMTExL2ouMTc0MC05NzEzLjIwMTguMDExNjkueAoKCiMgUiB5w7xrbGVtZQoKaHR0cDovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVhjQkxFVmtucXZZCgpbIVtXaGF0IGlzIFI/XShodHRwOi8vaW1nLnlvdXR1YmUuY29tL3ZpL1hjQkxFVmtucXZZLzAuanBnKV0oaHR0cDovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVhjQkxFVmtucXZZKQoKCiMjIFItcHJvamVjdAoKaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvCgotLS0KClshW10oaHR0cHM6Ly9pc21heWMuZ2l0aHViLmlvL3RhbGtzL25lc3MtaW5mZXIvaW1nL2VuZ2luZS5wbmcpXShodHRwczovL2lzbWF5Yy5naXRodWIuaW8vdGFsa3MvbmVzcy1pbmZlci9zbGlkZV9kZWNrLmh0bWwjNikKCi0tLQoKIyMgUlN0dWRpbwoKaHR0cHM6Ly93d3cucnN0dWRpby5jb20vCgpodHRwczovL3d3dy5yc3R1ZGlvLmNvbS9wcm9kdWN0cy9yc3R1ZGlvL2Rvd25sb2FkLwoKaHR0cHM6Ly9tb2Rlcm5kaXZlLmNvbS8yLWdldHRpbmctc3RhcnRlZC5odG1sCgotLS0KClshW10oaHR0cDovL3d3dy11c2Vycy55b3JrLmFjLnVrL35lcjEzL1JTdHVkaW8lMjBBbmF0b215LnN2ZyldKGh0dHBzOi8vYnV6enJiZWVsaW5lLmJsb2cvMjAxOC8wNy8wNC9yc3R1ZGlvLWFuYXRvbXkvKQoKCgotLS0KCiMjIyBSU3R1ZGlvIGVrbGVudGlsZXJpCgotIERpc2NvdmVyIGFuZCBpbnN0YWxsIHVzZWZ1bCBSU3R1ZGlvIGFkZGlucwoKaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2FkZGluc2xpc3QvUkVBRE1FLmh0bWwKCmh0dHBzOi8vcnN0dWRpby5naXRodWIuaW8vcnN0dWRpb2FkZGlucy8KCgpgYGB7cn0KIyBkZXZ0b29sczo6aW5zdGFsbF9naXRodWIoInJzdHVkaW8vYWRkaW5leGFtcGxlcyIsIHR5cGUgPSAic291cmNlIikKYGBgCgoKLS0tCgojIyBYMTEKCmh0dHBzOi8vd3d3LnhxdWFydHoub3JnLwoKLS0tCgojIyBKYXZhIE9TCgpodHRwczovL3N1cHBvcnQuYXBwbGUuY29tL2tiL2RsMTU3MgoKLS0tCgoKIyBSIHpvciDFn2V5bGVyIGnDp2luIGtvbGF5LCBrb2xheSDFn2V5bGVyIGnDp2luIHpvcgoKCi0gW1IgbWFrZXMgZWFzeSB0aGluZ3MgaGFyZCwgYW5kIGhhcmQgdGhpbmdzIGVhc3ldKGh0dHA6Ly9yNHN0YXRzLmNvbS9hcnRpY2xlcy93aHktci1pcy1oYXJkLXRvLWxlYXJuLykKCgotIEF5bsSxIMWfZXlpIMOnb2sgZmF6bGEgxZ9la2lsZGUgeWFwbWFrIG3DvG1rw7xuCgpSIFN5bnRheCBDb21wYXJpc29uOjpDSEVBVCBTSEVFVAoKaHR0cHM6Ly93d3cuYW1lbGlhLm1uL1N5bnRheC1jaGVhdHNoZWV0LnBkZgoKCgotLS0KCgojIFIgcGFrZXRsZXJpCgoKIyMgTmVkZW4gcGFrZXRsZXIgdmFyCgpbIVtdKGh0dHBzOi8vaXNtYXljLmdpdGh1Yi5pby90YWxrcy9uZXNzLWluZmVyL2ltZy9hcHBzdG9yZS5wbmcpXShodHRwczovL2lzbWF5Yy5naXRodWIuaW8vdGFsa3MvbmVzcy1pbmZlci9zbGlkZV9kZWNrLmh0bWwjNykKCi0tLQoKPHNjcmlwdCBhc3luYyBzcmM9Imh0dHBzOi8vcGxhdGZvcm0udHdpdHRlci5jb20vd2lkZ2V0cy5qcyIgY2hhcnNldD0idXRmLTgiPjwvc2NyaXB0PjxibG9ja3F1b3RlIGNsYXNzPSJ0d2l0dGVyLXR3ZWV0IiBkYXRhLWxhbmc9ImVuIj48cCBsYW5nPSJlbiIgZGlyPSJsdHIiPkkgbG92ZSB0aGUgPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9oYXNodGFnL3JzdGF0cz9zcmM9aGFzaCZhbXA7cmVmX3NyYz10d3NyYyU1RXRmdyI+I3JzdGF0czwvYT4gY29tbXVuaXR5Ljxicj5Tb21lb25lIGlzIGxpa2UsICZxdW90O29oIGhleSBwZWVwcywgSSBzYXcgYSBiaWcgbmVlZCBmb3IgdGhpcyBtdW5kYW5lIGJ1dCBkaWZmaWN1bHQgdGFzayB0aGF0IEkgaW5mcmVxdWVudGx5IGRvLCBzbyBJIGNyZWF0ZWQgYSBwYWNrYWdlIHRoYXQgd2lsbCBsaXRlcmFsbHkgc2NyYXBlIHRoZSBsYXN0IGJpdHMgb2YgcGVhbnV0IGJ1dHRlciBvdXQgb2YgdGhlIGphciBmb3IgeW91LiBJdCYjMzk7cyBjYWxsZWQgcGJwbHlyLiZxdW90Ozxicj5XaGF0IGEgdHJpYmUuPC9wPiZtZGFzaDsgRnJhbmsgRWxhdnNreSDhtLDhtYPhtZfhtYMg4bWC4bam4ba74bWDyrPhtYggKEBGcmFua2x5X0RhdGEpIDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vRnJhbmtseV9EYXRhL3N0YXR1cy8xMDE0MTg5MDk1Mjk0MjkxOTY4P3JlZl9zcmM9dHdzcmMlNUV0ZnciPkp1bHkgMywgMjAxODwvYT48L2Jsb2NrcXVvdGU+CgotLS0KCgoKaHR0cHM6Ly9ibG9nLm1pdGNoZWxsb2hhcmF3aWxkLmNvbS9ibG9nL3VzZXItMjAxOC1mZWF0dXJlLXdhbGwvCgotLS0KCiFbXShodHRwczovL2Jsb2cubWl0Y2hlbGxvaGFyYXdpbGQuY29tL2Jsb2cvMjAxOC0wNy0xMS11c2VyLTIwMTgtZmVhdHVyZS13YWxsX2ZpbGVzL2ZpbmFsLmpwZykKCi0tLQoKIyMgUGFrZXRsZXJpIG5lcmVkZW4gYnVsYWJpbGlyaXoKCi0gQXZhaWxhYmxlIENSQU4gUGFja2FnZXMgQnkgTmFtZSAgCmh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9hdmFpbGFibGVfcGFja2FnZXNfYnlfbmFtZS5odG1sCgotIEJpb2NvbmR1Y3RvciAgCmh0dHBzOi8vd3d3LmJpb2NvbmR1Y3Rvci5vcmcKCi0gUmVjb21tZW5kUiAgCmh0dHA6Ly9yZWNvbW1lbmRyLmluZm8vCgotIHBrZ3NlYXJjaCAgCkNSQU4gcGFja2FnZSBzZWFyY2ggIApodHRwczovL2dpdGh1Yi5jb20vbWV0YWNyYW4vcGtnc2VhcmNoCgotIEF3ZXNvbWUgUiAgCmh0dHBzOi8vYXdlc29tZS1yLmNvbS8gIAoKCiMjIEtlbmRpIHBha2V0IGV2cmVuaW5pIG9sdcWfdHVyCgotIHBrZ3ZlcnNlOiBCdWlsZCBhIE1ldGEtUGFja2FnZSBVbml2ZXJzZSAgCmh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9wa2d2ZXJzZS9pbmRleC5odG1sCgoKCi0tLQoKIyMgUiBpw6dpbiB5YXJkxLFtIGJ1bG1hCgoKYGBge3IgeWFyZMSxbX0KIyA/bWVhbgojID8/ZWZldGNoCiMgaGVscChtZXJnZSkKIyBleGFtcGxlKG1lcmdlKQpgYGAKCgoKLSBWaWduZXR0ZQoKIVtdKGZpZ3VyZXMvdmlnbmV0dGUucG5nKQoKLS0tCgotIFJEb2N1bWVudGF0aW9uCmh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZwoKLSBSIFBhY2thZ2UgRG9jdW1lbnRhdGlvbgpodHRwczovL3JkcnIuaW8vCgotIEdpdEh1YgoKLSBTdGFja292ZXJmbG93CgpodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tLwoKLSBHb29nbGUgdXlndW4gYW5haHRhciBrZWxpbWUKCgoKPHNjcmlwdCBhc3luYyBzcmM9Imh0dHBzOi8vcGxhdGZvcm0udHdpdHRlci5jb20vd2lkZ2V0cy5qcyIgY2hhcnNldD0idXRmLTgiPjwvc2NyaXB0PjxibG9ja3F1b3RlIGNsYXNzPSJ0d2l0dGVyLXR3ZWV0IiBkYXRhLWxhbmc9ImVuIj48cCBsYW5nPSJlbiIgZGlyPSJsdHIiPkhvdyBJIHVzZSA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2hhc2h0YWcvcnN0YXRzP3NyYz1oYXNoJmFtcDtyZWZfc3JjPXR3c3JjJTVFdGZ3Ij4jcnN0YXRzPC9hPiA8YnI+aC90IDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vVGhlUHJhY3RpY2FsRGV2P3JlZl9zcmM9dHdzcmMlNUV0ZnciPkBUaGVQcmFjdGljYWxEZXY8L2E+IDxhIGhyZWY9Imh0dHBzOi8vdC5jby9lclJuVEcwVWpyIj5waWMudHdpdHRlci5jb20vZXJSblRHMFVqcjwvYT48L3A+Jm1kYXNoOyBFbWlseSBCb3ZlZSAoQGVib3ZlZTA5KSA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2Vib3ZlZTA5L3N0YXR1cy8xMDI4MDM3NTk0OTQ3NDg1Njk2P3JlZl9zcmM9dHdzcmMlNUV0ZnciPkF1Z3VzdCAxMCwgMjAxODwvYT48L2Jsb2NrcXVvdGU+CgoKLS0tCgoKIVtdKGZpZ3VyZXMvR29vZ2xlLXBhY2thZ2UtbmFtZS5wbmcpCgotLS0KCgoKIVtdKGZpZ3VyZXMvR29vZ2xlLXN0YXJ0LXdpdGgtUi5wbmcpCgotLS0KCi0gQXdlc29tZSBDaGVhdHNoZWV0Cmh0dHBzOi8vZ2l0aHViLmNvbS9kZXRhaWx5YW5nL2F3ZXNvbWUtY2hlYXRzaGVldAoKaHR0cDovL2NyYW4uci1wcm9qZWN0Lm9yZy9kb2MvY29udHJpYi9CYWdnb3R0LXJlZmNhcmQtdjIucGRmCgpodHRwczovL3d3dy5yc3R1ZGlvLmNvbS9yZXNvdXJjZXMvY2hlYXRzaGVldHMvCgoKLSBBd2Vzb21lIFIKCmh0dHBzOi8vZ2l0aHViLmNvbS9xaW53Zi9hd2Vzb21lLVIjcmVhZG1lCgpodHRwczovL2F3ZXNvbWUtci5jb20vCgoKCgotIFR3aXR0ZXIKCmh0dHBzOi8vdHdpdHRlci5jb20vaGFzaHRhZy9yc3RhdHM/c3JjPWhhc2gKCgotIFJlcHJvZHVjaWJsZSBFeGFtcGxlcwoKPGJsb2NrcXVvdGUgY2xhc3M9InR3aXR0ZXItdHdlZXQiIGRhdGEtbGFuZz0iZW4iPjxwIGxhbmc9ImVuIiBkaXI9Imx0ciI+R290IGEgcXVlc3Rpb24gdG8gYXNrIG9uIDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vU2xhY2tIUT9yZWZfc3JjPXR3c3JjJTVFdGZ3Ij5AU2xhY2tIUTwvYT4gb3IgcG9zdCBvbiA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2dpdGh1Yj9yZWZfc3JjPXR3c3JjJTVFdGZ3Ij5AZ2l0aHViPC9hPj8gTm8gdGltZSB0byByZWFkIHRoZSBsb25nIHBvc3Qgb24gaG93IHRvIHVzZSByZXByZXg/IEhlcmUgaXMgYSAyMC1zZWNvbmQgZ2lmIGZvciB5b3UgdG8gZm9ybWF0IHlvdXIgUiBjb2RlcyBuaWNlbHkgYW5kIGZvciBvdGhlcnMgdG8gcmVwcm9kdWNlIHlvdXIgcHJvYmxlbS4gKEFuIGV4YW1wbGUgZnJvbSBhIHRhbGsgZ2l2ZW4gYnkgPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9KZW5ueUJyeWFuP3JlZl9zcmM9dHdzcmMlNUV0ZnciPkBKZW5ueUJyeWFuPC9hPikgPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9oYXNodGFnL3JzdGF0P3NyYz1oYXNoJmFtcDtyZWZfc3JjPXR3c3JjJTVFdGZ3Ij4jcnN0YXQ8L2E+IDxhIGhyZWY9Imh0dHBzOi8vdC5jby9ncHVHWHBGSXNYIj5waWMudHdpdHRlci5jb20vZ3B1R1hwRklzWDwvYT48L3A+Jm1kYXNoOyBaaGlZYW5nIChAemhpaWl5YW5nKSA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL3poaWlpeWFuZy9zdGF0dXMvMTA1MzAwNjAwMzcxMTU2OTkyMD9yZWZfc3JjPXR3c3JjJTVFdGZ3Ij5PY3RvYmVyIDE4LCAyMDE4PC9hPjwvYmxvY2txdW90ZT48c2NyaXB0IGFzeW5jIHNyYz0iaHR0cHM6Ly9wbGF0Zm9ybS50d2l0dGVyLmNvbS93aWRnZXRzLmpzIiBjaGFyc2V0PSJ1dGYtOCI+PC9zY3JpcHQ+CgoKCgoKLS0tCgojIyBSIHBha2V0IHnDvGtsZW1lCgpgYGAKaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIiwgZGVwZW5kZW5jaWVzID0gVFJVRSkKaW5zdGFsbC5wYWNrYWdlcygiam12IiwgZGVwZW5kZW5jaWVzID0gVFJVRSkKaW5zdGFsbC5wYWNrYWdlcygicXVlc3Rpb25yIiwgZGVwZW5kZW5jaWVzID0gVFJVRSkKaW5zdGFsbC5wYWNrYWdlcygiUmNtZHIiLCBkZXBlbmRlbmNpZXMgPSBUUlVFKQppbnN0YWxsLnBhY2thZ2VzKCJzdW1tYXJ5dG9vbHMiKQpgYGAKCmBgYHtyIHBha2V0IHnDvGtsZW1lfQojIGluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIsIGRlcGVuZGVuY2llcyA9IFRSVUUpCiMgaW5zdGFsbC5wYWNrYWdlcygiam12IiwgZGVwZW5kZW5jaWVzID0gVFJVRSkKIyBpbnN0YWxsLnBhY2thZ2VzKCJxdWVzdGlvbnIiLCBkZXBlbmRlbmNpZXMgPSBUUlVFKQojIGluc3RhbGwucGFja2FnZXMoIlJjbWRyIiwgZGVwZW5kZW5jaWVzID0gVFJVRSkKIyBpbnN0YWxsLnBhY2thZ2VzKCJzdW1tYXJ5dG9vbHMiKQpgYGAKCgpgYGB7ciBwYWtldCBjYWdpcm1hLCBlcnJvcj1GQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIGV2YWwgPSBUUlVFLCBpbmNsdWRlID0gVFJVRX0KIyByZXF1aXJlKHRpZHl2ZXJzZSkKIyByZXF1aXJlKGptdikKIyByZXF1aXJlKHF1ZXN0aW9ucikKIyBsaWJyYXJ5KHN1bW1hcnl0b29scykKIyBsaWJyYXJ5KGdnYW5pbWF0ZSkKYGBgCgotLS0KCiMgUiBzdHVkaW8gaWxlIHByb2plIG9sdcWfdHVybWEKCmh0dHBzOi8vc3VwcG9ydC5yc3R1ZGlvLmNvbS9oYy9lbi11cy9hcnRpY2xlcy8yMDA1MjYyMDctVXNpbmctUHJvamVjdHMKCiFbXShodHRwOi8vd3d3LnJzdHVkaW8uY29tL2ltYWdlcy9kb2NzL3Byb2plY3RzX25ldy5wbmcpCgotLS0KCiMgUlN0dWRpbyBpbGUgdmVyaSB5w7xrbGVtZQoKaHR0cHM6Ly9zdXBwb3J0LnJzdHVkaW8uY29tL2hjL2VuLXVzL2FydGljbGVzLzIxODYxMTk3Ny1JbXBvcnRpbmctRGF0YS13aXRoLVJTdHVkaW8KCiFbXShodHRwczovL3N1cHBvcnQucnN0dWRpby5jb20vaGMvZW4tdXMvYXJ0aWNsZV9hdHRhY2htZW50cy8yMDYyNzc2MTgvZGF0YS1pbXBvcnQtb3ZlcnZpZXcuZ2lmKQoKLS0tCgojIyBFeGNlbAoKIyMgU1BTUwoKIyMgY3N2CgoKLS0tCgojIFZlcml5aSBnw7Zyw7xudMO8bGVtZQoKPHNjcmlwdCBhc3luYyBzcmM9Imh0dHBzOi8vcGxhdGZvcm0udHdpdHRlci5jb20vd2lkZ2V0cy5qcyIgY2hhcnNldD0idXRmLTgiPjwvc2NyaXB0PjxibG9ja3F1b3RlIGNsYXNzPSJ0d2l0dGVyLXR3ZWV0IiBkYXRhLWxhbmc9ImVuIj48cCBsYW5nPSJlbiIgZGlyPSJsdHIiPlNwcmVhZHNoZWV0IHVzZXJzIHVzaW5nIDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vaGFzaHRhZy9yc3RhdHM/c3JjPWhhc2gmYW1wO3JlZl9zcmM9dHdzcmMlNUV0ZnciPiNyc3RhdHM8L2E+OiAgd2hlcmUmIzM5O3MgdGhlIGRhdGE/PGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9oYXNodGFnL3JzdGF0cz9zcmM9aGFzaCZhbXA7cmVmX3NyYz10d3NyYyU1RXRmdyI+I3JzdGF0czwvYT4gdXNlcnMgdXNpbmcgc3ByZWFkc2hlZXRzOiAgd2hlcmUmIzM5O3MgdGhlIGNvZGU/PC9wPiZtZGFzaDsgTGVvbmFyZCBLaWVmZXIgKEBsZW5raWVmZXIpIDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vbGVua2llZmVyL3N0YXR1cy8xMDE1NTg3NDc1NTgwOTU2NjcyP3JlZl9zcmM9dHdzcmMlNUV0ZnciPkp1bHkgNywgMjAxODwvYT48L2Jsb2NrcXVvdGU+CgoKCmBgYHtyLCByZXN1bHRzPSJtYXJrdXAifQojIGxpYnJhcnkobnljZmxpZ2h0czEzKQojIHN1bW1hcnkoZmxpZ2h0cykKYGBgCgoKCmBgYApWaWV3KGRhdGEpCmBgYAoKCmBgYApkYXRhCmBgYAoKCmBgYApoZWFkCmBgYAoKCmBgYAp0YWlsCmBgYAoKCmBgYApnbGltcHNlCmBgYAoKCmBgYApzdHIKYGBgCgoKYGBgCnNraW1yOjpza2ltKCkKYGBgCgotLS0KCgojIFZlcml5aSBkZcSfacWfdGlybWUKCiMjIFZlcml5aSBrb2QgaWxlIGRlxJ9pxZ90aXJlbGltCgojIyBWZXJpeWkgZWtsZW50aWxlcmxlIGRlxJ9pxZ90aXJtZQoKIVtdKGZpZ3VyZXMvY2hhbmdlX2RhdGEucG5nKQoKCi0tLQoKCiMjIFJTdHVkaW8gYXJhY8SxbMSxxJ/EsXlsYSByZWNvZGUKCipxdWVzdGlvbnIqIHBha2V0aSBrdWxsYW7EsWxhY2FrCgohW10oZmlndXJlcy9sZXZlbF9yZWNvZGUucG5nKQoKCi0tLQoKCgpodHRwczovL2p1YmEuZ2l0aHViLmlvL3F1ZXN0aW9uci9hcnRpY2xlcy9yZWNvZGluZ19hZGRpbnMuaHRtbAoKCiFbXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vanViYS9xdWVzdGlvbnIvbWFzdGVyL3Jlc291cmNlcy9zY3JlZW5zaG90cy9pcmVjXzEucG5nKQoKCi0tLQoKIVtdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9qdWJhL3F1ZXN0aW9uci9tYXN0ZXIvcmVzb3VyY2VzL3NjcmVlbnNob3RzL2lyZWNfMi5wbmcpCgoKLS0tCgohW10oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2p1YmEvcXVlc3Rpb25yL21hc3Rlci9yZXNvdXJjZXMvc2NyZWVuc2hvdHMvaXJlY18zLnBuZykKCgotLS0KCiMgQmFzaXQgdGFuxLFtbGF5xLFjxLEgaXN0YXRpc3Rpa2xlcgoKYGBgCnN1bW1hcnkoKQpgYGAKCmBgYAptZWFuCmBgYAoKYGBgCm1lZGlhbgpgYGAKCmBgYAptaW4KYGBgCgpgYGAKbWF4CmBgYAoKYGBgCnNkCmBgYAoKYGBgCnRhYmxlKCkKYGBgCgoKYGBge3IgZGVzY3JpcHRpdmUsIGVjaG89VFJVRSwgaW5jbHVkZSA9IFRSVUV9CmxpYnJhcnkocmVhZHIpCmlyaXNkYXRhIDwtIHJlYWRfY3N2KCJkYXRhL2lyaXMuY3N2IikKCmptdjo6ZGVzY3JpcHRpdmVzKAogICAgZGF0YSA9IGlyaXNkYXRhLAogICAgdmFycyA9ICJTZXBhbC5MZW5ndGgiLAogICAgc3BsaXRCeSA9ICJTcGVjaWVzIiwKICAgIGZyZXEgPSBUUlVFLAogICAgaGlzdCA9IFRSVUUsCiAgICBkZW5zID0gVFJVRSwKICAgIGJhciA9IFRSVUUsCiAgICBib3ggPSBUUlVFLAogICAgdmlvbGluID0gVFJVRSwKICAgIGRvdCA9IFRSVUUsCiAgICBtb2RlID0gVFJVRSwKICAgIHN1bSA9IFRSVUUsCiAgICBzZCA9IFRSVUUsCiAgICB2YXJpYW5jZSA9IFRSVUUsCiAgICByYW5nZSA9IFRSVUUsCiAgICBzZSA9IFRSVUUsCiAgICBza2V3ID0gVFJVRSwKICAgIGt1cnQgPSBUUlVFLAogICAgcXVhcnQgPSBUUlVFLAogICAgcGNFcUdyID0gVFJVRSkKYGBgCgotLS0KCmBgYHtyIHNjYXR0ZXIsIGVjaG89VFJVRSwgaW5jbHVkZT1UUlVFfQojIGluc3RhbGwucGFja2FnZXMoInNjYXRyIikKCnNjYXRyOjpzY2F0KAogICAgZGF0YSA9IGlyaXNkYXRhLAogICAgeCA9ICJTZXBhbC5MZW5ndGgiLAogICAgeSA9ICJTZXBhbC5XaWR0aCIsCiAgICBncm91cCA9ICJTcGVjaWVzIiwKICAgIG1hcmcgPSAiZGVucyIsCiAgICBsaW5lID0gImxpbmVhciIsCiAgICBzZSA9IFRSVUUpCgpgYGAKCiMjIHN1bW1hcnl0b29scwoKaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL3N1bW1hcnl0b29scy92aWduZXR0ZXMvSW50cm9kdWN0aW9uLmh0bWwKCmBgYHtyLCBpbmNsdWRlPVRSVUUsIGNvbW1lbnQ9TkEsIHByb21wdD1GQUxTRSwgY2FjaGU9RkFMU0UsIGVjaG89VFJVRSwgcmVzdWx0cz0nYXNpcyd9CmxpYnJhcnkoc3VtbWFyeXRvb2xzKQpzdW1tYXJ5dG9vbHM6OmZyZXEoaXJpcyRTcGVjaWVzLCBzdHlsZSA9ICJybWFya2Rvd24iKQpgYGAKCmBgYHtyLCBpbmNsdWRlPVRSVUUsIGNvbW1lbnQ9TkEsIHByb21wdD1GQUxTRSwgY2FjaGU9RkFMU0UsIGVjaG89VFJVRSwgcmVzdWx0cz0nYXNpcyd9CnN1bW1hcnl0b29sczo6ZnJlcShpcmlzJFNwZWNpZXMsIHJlcG9ydC5uYXMgPSBGQUxTRSwgc3R5bGUgPSAicm1hcmtkb3duIiwgb21pdC5oZWFkaW5ncyA9IFRSVUUpCmBgYAoKYGBge3IsIGluY2x1ZGU9VFJVRSwgY29tbWVudD1OQSwgcHJvbXB0PUZBTFNFLCBjYWNoZT1GQUxTRSwgZWNobz1UUlVFLCByZXN1bHRzPSdhc2lzJ30Kd2l0aCh0b2JhY2NvLCBwcmludChjdGFibGUoc21va2VyLCBkaXNlYXNlZCksIG1ldGhvZCA9ICdyZW5kZXInKSkKYGBgCgoKYGBge3IsIGluY2x1ZGU9VFJVRSwgY29tbWVudD1OQSwgcHJvbXB0PUZBTFNFLCBjYWNoZT1GQUxTRSwgZWNobz1UUlVFLCByZXN1bHRzPSdhc2lzJ30Kd2l0aCh0b2JhY2NvLCAKICAgICBwcmludChjdGFibGUoc21va2VyLCBkaXNlYXNlZCwgcHJvcCA9ICduJywgdG90YWxzID0gRkFMU0UpLCAKICAgICAgICAgICBvbWl0LmhlYWRpbmdzID0gVFJVRSwgbWV0aG9kID0gInJlbmRlciIpKQpgYGAKCgoKYGBge3IsIGluY2x1ZGU9VFJVRSwgY29tbWVudD1OQSwgcHJvbXB0PUZBTFNFLCBjYWNoZT1GQUxTRSwgZWNobz1UUlVFLCByZXN1bHRzPSdhc2lzJ30Kc3VtbWFyeXRvb2xzOjpkZXNjcihpcmlzLCBzdHlsZSA9ICJybWFya2Rvd24iKQpgYGAKCgoKYGBge3IsIGluY2x1ZGU9VFJVRSwgY29tbWVudD1OQSwgcHJvbXB0PUZBTFNFLCBjYWNoZT1GQUxTRSwgZWNobz1UUlVFLCByZXN1bHRzPSdhc2lzJ30KZGVzY3IoaXJpcywgc3RhdHMgPSBjKCJtZWFuIiwgInNkIiwgIm1pbiIsICJtZWQiLCAibWF4IiksIHRyYW5zcG9zZSA9IFRSVUUsIAogICAgICBvbWl0LmhlYWRpbmdzID0gVFJVRSwgc3R5bGUgPSAicm1hcmtkb3duIikKYGBgCgoKCmBgYHtyLCBpbmNsdWRlPVRSVUUsIGNvbW1lbnQ9TkEsIHByb21wdD1GQUxTRSwgY2FjaGU9RkFMU0UsIGVjaG89VFJVRSwgcmVzdWx0cz0nYXNpcyd9CiMgdmlldyhkZlN1bW1hcnkoaXJpcykpCgpgYGAKCgohW10oZmlndXJlcy9kZnN1bW1hcnkucG5nKQoKCgpgYGB7ciwgaW5jbHVkZT1UUlVFLCBjb21tZW50PU5BLCBwcm9tcHQ9RkFMU0UsIGNhY2hlPUZBTFNFLCBlY2hvPVRSVUUsIHJlc3VsdHM9J2FzaXMnfQpkZlN1bW1hcnkodG9iYWNjbywgcGxhaW4uYXNjaWkgPSBGQUxTRSwgc3R5bGUgPSAiZ3JpZCIpCmBgYAoKCmBgYHtyLCBpbmNsdWRlPVRSVUUsIGNvbW1lbnQ9TkEsIHByb21wdD1GQUxTRSwgY2FjaGU9RkFMU0UsIGVjaG89VFJVRSwgcmVzdWx0cz0nYXNpcyd9CgojIEZpcnN0IHNhdmUgdGhlIHJlc3VsdHMKCmlyaXNfc3RhdHNfYnlfc3BlY2llcyA8LSBieShkYXRhID0gaXJpcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRJQ0VTID0gaXJpcyRTcGVjaWVzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTiA9IGRlc2NyLCBzdGF0cyA9IGMoIm1lYW4iLCAic2QiLCAibWluIiwgIm1lZCIsICJtYXgiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3Bvc2UgPSBUUlVFKQoKIyBUaGVuIHVzZSB2aWV3KCksIGxpa2Ugc286Cgp2aWV3KGlyaXNfc3RhdHNfYnlfc3BlY2llcywgbWV0aG9kID0gInBhbmRlciIsIHN0eWxlID0gInJtYXJrZG93biIpCmBgYAoKYGBge3IsIGluY2x1ZGU9VFJVRSwgY29tbWVudD1OQSwgcHJvbXB0PUZBTFNFLCBjYWNoZT1GQUxTRSwgZWNobz1UUlVFLCByZXN1bHRzPSdhc2lzJ30KIyB2aWV3KGlyaXNfc3RhdHNfYnlfc3BlY2llcykKYGBgCgohW10oZmlndXJlcy9EZXNjcmlwdGl2ZVN0YXRpc3RpY3MucG5nKQoKLS0tCgpgYGB7ciwgaW5jbHVkZT1UUlVFLCBjb21tZW50PU5BLCBwcm9tcHQ9RkFMU0UsIGNhY2hlPUZBTFNFLCBlY2hvPVRSVUUsIHJlc3VsdHM9J2FzaXMnfQpkYXRhKHRvYmFjY28pICMgdG9iYWNjbyBpcyBhbiBleGFtcGxlIGRhdGFmcmFtZSBpbmNsdWRlZCBpbiB0aGUgcGFja2FnZQpCTUlfYnlfYWdlIDwtIHdpdGgodG9iYWNjbywgCiAgICAgICAgICAgICAgICAgICBieShCTUksIGFnZS5nciwgZGVzY3IsIAogICAgICAgICAgICAgICAgICAgICAgc3RhdHMgPSBjKCJtZWFuIiwgInNkIiwgIm1pbiIsICJtZWQiLCAibWF4IikpKQp2aWV3KEJNSV9ieV9hZ2UsICJwYW5kZXIiLCBzdHlsZSA9ICJybWFya2Rvd24iKQpgYGAKCi0tLQoKYGBge3IsIGluY2x1ZGU9VFJVRSwgY29tbWVudD1OQSwgcHJvbXB0PUZBTFNFLCBjYWNoZT1GQUxTRSwgZWNobz1UUlVFLCByZXN1bHRzPSdhc2lzJ30KQk1JX2J5X2FnZSA8LSB3aXRoKHRvYmFjY28sIAogICAgICAgICAgICAgICAgICAgYnkoQk1JLCBhZ2UuZ3IsIGRlc2NyLCAgdHJhbnNwb3NlID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgIHN0YXRzID0gYygibWVhbiIsICJzZCIsICJtaW4iLCAibWVkIiwgIm1heCIpKSkKCnZpZXcoQk1JX2J5X2FnZSwgInBhbmRlciIsIHN0eWxlID0gInJtYXJrZG93biIsIG9taXQuaGVhZGluZ3MgPSBUUlVFKQpgYGAKCi0tLQoKYGBge3IsIGluY2x1ZGU9VFJVRSwgY29tbWVudD1OQSwgcHJvbXB0PUZBTFNFLCBjYWNoZT1GQUxTRSwgZWNobz1UUlVFLCByZXN1bHRzPSdhc2lzJ30KdG9iYWNjb19zdWJzZXQgPC0gdG9iYWNjb1sgLGMoImdlbmRlciIsICJhZ2UuZ3IiLCAic21va2VyIildCmZyZXFfdGFibGVzIDwtIGxhcHBseSh0b2JhY2NvX3N1YnNldCwgZnJlcSkKCiMgdmlldyhmcmVxX3RhYmxlcywgZm9vdG5vdGUgPSBOQSwgZmlsZSA9ICdmcmVxLXRhYmxlcy5odG1sJykKYGBgCgotLS0KCmBgYHtyLCBpbmNsdWRlPVRSVUUsIGNvbW1lbnQ9TkEsIHByb21wdD1GQUxTRSwgY2FjaGU9RkFMU0UsIGVjaG89VFJVRSwgcmVzdWx0cz0nYXNpcyd9CndoYXQuaXMoaXJpcykKYGBgCgotLS0KCmBgYHtyfQpmcmVxKHRvYmFjY28kZ2VuZGVyLCBzdHlsZSA9ICdybWFya2Rvd24nKQpgYGAKCi0tLQoKYGBge3J9CnByaW50KGZyZXEodG9iYWNjbyRnZW5kZXIpLCBtZXRob2QgPSAncmVuZGVyJykKYGBgCgotLS0KCiMjIHNraW1yCgpgYGAKbGlicmFyeShza2ltcikKc2tpbShkZikKYGBgCgotLS0KCiMjIERhdGFFeHBsb3JlcgoKYGBgCmxpYnJhcnkoRGF0YUV4cGxvcmVyKQpEYXRhRXhwbG9yZXI6OmNyZWF0ZV9yZXBvcnQoZGYpCmBgYAoKClshW10oaHR0cHM6Ly9zdGF0aWMxLnNxdWFyZXNwYWNlLmNvbS9zdGF0aWMvNThlZWY4ODQ2YTQ5NjNlNDI5Njg3YTRkL3QvNWJkZmMyZmI0ZDdhOWMwNGVlNTBiN2FhLzE1NDEzOTExNjA3MDIvZGF0YUV4cGxvcmVyR2lmTGcuZ2lmP2Zvcm1hdD0xNTAwdyldKGh0dHBzOi8vd3d3LmxpdHRsZW1pc3NkYXRhLmNvbS9ibG9nL3NpbXBsZS1lZGEpCgoKCi0tLQoKIyMgR3JhZmlrbGVyCgpgYGB7cn0KIyBsaWJyYXJ5KGdncGxvdDIpCiMgbGlicmFyeShtb3NhaWMpCiMgbVBsb3QoaXJpc2RhdGEpCmBgYAoKLS0tCgpgYGB7cn0KY3RhYmxlKHRvYmFjY28kZ2VuZGVyLCB0b2JhY2NvJHNtb2tlciwgc3R5bGUgPSAncm1hcmtkb3duJykKYGBgCgotLS0KCmBgYHtyfQpwcmludChjdGFibGUodG9iYWNjbyRnZW5kZXIsIHRvYmFjY28kc21va2VyKSwgbWV0aG9kID0gJ3JlbmRlcicpCmBgYAoKYGBgCmRlc2NyKHRvYmFjY28sIHN0eWxlID0gJ3JtYXJrZG93bicpCgpwcmludChkZXNjcih0b2JhY2NvKSwgbWV0aG9kID0gJ3JlbmRlcicsIHRhYmxlLmNsYXNzZXMgPSAnc3Qtc21hbGwnKQoKZGZTdW1tYXJ5KHRvYmFjY28sIHN0eWxlID0gJ2dyaWQnLCBwbGFpbi5hc2NpaSA9IEZBTFNFKQoKcHJpbnQoZGZTdW1tYXJ5KHRvYmFjY28sIGdyYXBoLm1hZ25pZiA9IDAuNzUpLCBtZXRob2QgPSAncmVuZGVyJykKYGBgCgoKLS0tCgoKCjxibG9ja3F1b3RlIGNsYXNzPSJ0d2l0dGVyLXR3ZWV0IiBkYXRhLWxhbmc9ImVuIj48cCBsYW5nPSJlbiIgZGlyPSJsdHIiPkhlcmUsIGJ1aWxkaW5nIHVwIGEgPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9oYXNodGFnL2dncGxvdDI/c3JjPWhhc2gmYW1wO3JlZl9zcmM9dHdzcmMlNUV0ZnciPiNnZ3Bsb3QyPC9hPiBhcyBzbG93bHkgYXMgcG9zc2libGUsIDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vaGFzaHRhZy9yc3RhdHM/c3JjPWhhc2gmYW1wO3JlZl9zcmM9dHdzcmMlNUV0ZnciPiNyc3RhdHM8L2E+LiAgSW5jcmVtZW50YWwgYWRqdXN0bWVudHMuICA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2hhc2h0YWcvcnN0YXRzdGVhY2hpbmdpZGVhcz9zcmM9aGFzaCZhbXA7cmVmX3NyYz10d3NyYyU1RXRmdyI+I3JzdGF0c3RlYWNoaW5naWRlYXM8L2E+IDxhIGhyZWY9Imh0dHBzOi8vdC5jby9uVXVsUWw4YlBoIj5waWMudHdpdHRlci5jb20vblV1bFFsOGJQaDwvYT48L3A+Jm1kYXNoOyBHaW5hIFJleW5vbGRzIChARXZhTWFlUmV5KSA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL0V2YU1hZVJleS9zdGF0dXMvMTAyOTEwNDY1Njc2MzU3MjIyNj9yZWZfc3JjPXR3c3JjJTVFdGZ3Ij5BdWd1c3QgMTMsIDIwMTg8L2E+PC9ibG9ja3F1b3RlPjxzY3JpcHQgYXN5bmMgc3JjPSJodHRwczovL3BsYXRmb3JtLnR3aXR0ZXIuY29tL3dpZGdldHMuanMiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4KCgotLS0KCgpbIVtdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9kcmVhbVJzL2VzcXVpc3NlL21hc3Rlci9tYW4vZmlndXJlcy9lc3F1aXNzZS5naWYpXShodHRwczovL2dpdGh1Yi5jb20vZHJlYW1Scy9lc3F1aXNzZSkKCgo8YmxvY2txdW90ZSBjbGFzcz0idHdpdHRlci10d2VldCIgZGF0YS1sYW5nPSJlbiI+PHAgbGFuZz0iZW4iIGRpcj0ibHRyIj5EcmVhbWluZyBvZiBhIGZhbmN5IDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vaGFzaHRhZy9Sc3RhdHM/c3JjPWhhc2gmYW1wO3JlZl9zcmM9dHdzcmMlNUV0ZnciPiNSc3RhdHM8L2E+IDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vaGFzaHRhZy9nZ3Bsb3Q/c3JjPWhhc2gmYW1wO3JlZl9zcmM9dHdzcmMlNUV0ZnciPiNnZ3Bsb3Q8L2E+IDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vaGFzaHRhZy9kYXRhdml6P3NyYz1oYXNoJmFtcDtyZWZfc3JjPXR3c3JjJTVFdGZ3Ij4jZGF0YXZpejwvYT4gYnV0IHN0aWxsIHNjYXJlZCBvZiB0eXBpbmcgPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9oYXNodGFnL2NvZGU/c3JjPWhhc2gmYW1wO3JlZl9zcmM9dHdzcmMlNUV0ZnciPiNjb2RlPC9hPj8gPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9fcHZpY3RvcnI/cmVmX3NyYz10d3NyYyU1RXRmdyI+QF9wdmljdG9ycjwvYT4gZXNxdWlzc2UgcGFja2FnZSBoYXMgeW91IGNvdmVyZWQgPGEgaHJlZj0iaHR0cHM6Ly90LmNvLzF2SURYY1ZBQUYiPmh0dHBzOi8vdC5jby8xdklEWGNWQUFGPC9hPiA8YSBocmVmPSJodHRwczovL3QuY28vUmxUa3B0bnJOdiI+cGljLnR3aXR0ZXIuY29tL1JsVGtwdG5yTnY8L2E+PC9wPiZtZGFzaDsgUmFkb3NsYXcgUGFuY3phayAoQFJQYW5jemFrKSA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL1JQYW5jemFrL3N0YXR1cy8xMDQ3MDE5NTg4NjU4MDQwODMyP3JlZl9zcmM9dHdzcmMlNUV0ZnciPk9jdG9iZXIgMiwgMjAxODwvYT48L2Jsb2NrcXVvdGU+CjxzY3JpcHQgYXN5bmMgc3JjPSJodHRwczovL3BsYXRmb3JtLnR3aXR0ZXIuY29tL3dpZGdldHMuanMiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4KCgoKCgoKCgoKCi0tLQoKIyBSY21kcgoKYGBgCmxpYnJhcnkoUmNtZHIpCgpSY21kcjo6Q29tbWFuZGVyKCkKCmBgYAoKCi0gQSBDb21wYXJhdGl2ZSBSZXZpZXcgb2YgdGhlIFIgQ29tbWFuZGVyIEdVSSBmb3IgUgoKaHR0cDovL3I0c3RhdHMuY29tL2FydGljbGVzL3NvZnR3YXJlLXJldmlld3Mvci1jb21tYW5kZXIvCgoKLS0tCgojIGphbW92aQoKaHR0cHM6Ly93d3cuamFtb3ZpLm9yZy8KCiFbIVtdKGh0dHBzOi8vd3d3LmphbW92aS5vcmcvYXNzZXRzL21haW4tc2NyZWVuc2hvdC5wbmcpXShodHRwczovL3d3dy5qYW1vdmkub3JnLykKCgpodHRwczovL2Jsb2cuamFtb3ZpLm9yZy8yMDE4LzA3LzMwL3JqLmh0bWwKCiFbIVtdKGh0dHBzOi8vYmxvZy5qYW1vdmkub3JnL2Fzc2V0cy9pbWFnZXMvcmoucG5nKV0oaHR0cHM6Ly9ibG9nLmphbW92aS5vcmcvMjAxOC8wNy8zMC9yai5odG1sKQoKLS0tCgojIFNvbnJha2kgS29udWxhcgoKLSBSU3R1ZGlvIGlsZSBHaXRIdWIKLSBIaXBvdGV6IHRlc3RsZXJpCi0gUiBNYXJrZG93biB2ZSBSIE5vdGVib29rIGlsZSB0ZWtyYXJsYW5hYmlsaXIgcmFwb3IKCgotLS0KCiMgRGnEn2VyIGtvZGxhcgoKLSBEacSfZXIga29kbGFyIGnDp2luIGJha8SxbsSxejogW2h0dHBzOi8vc2JhbGNpLmdpdGh1Yi5pby9dKGh0dHBzOi8vc2JhbGNpLmdpdGh1Yi5pby8pCgoKLS0tCgojIEdlcmkgQmlsZGlyaW0KCi0gR2VyaSBiaWxkaXJpbSBpw6dpbiB0xLFrbGF5xLFuxLF6OiBfW0dlcmkgYmlsZGlyaW0gZm9ybXVdKGh0dHBzOi8vZ29vLmdsL2Zvcm1zL1lqR1o1REhndFBsUjFSbkIzKV8KCgotLS0KCjxzY3JpcHQgaWQ9ImRzcS1jb3VudC1zY3IiIHNyYz0iLy9odHRwcy1zYmFsY2ktZ2l0aHViLWlvLmRpc3F1cy5jb20vY291bnQuanMiIGFzeW5jPjwvc2NyaXB0PgoKPGRpdiBpZD0iZGlzcXVzX3RocmVhZCI+PC9kaXY+CjxzY3JpcHQ+CgovKioKKiAgUkVDT01NRU5ERUQgQ09ORklHVVJBVElPTiBWQVJJQUJMRVM6IEVESVQgQU5EIFVOQ09NTUVOVCBUSEUgU0VDVElPTiBCRUxPVyBUTyBJTlNFUlQgRFlOQU1JQyBWQUxVRVMgRlJPTSBZT1VSIFBMQVRGT1JNIE9SIENNUy4KKiAgTEVBUk4gV0hZIERFRklOSU5HIFRIRVNFIFZBUklBQkxFUyBJUyBJTVBPUlRBTlQ6IGh0dHBzOi8vZGlzcXVzLmNvbS9hZG1pbi91bml2ZXJzYWxjb2RlLyNjb25maWd1cmF0aW9uLXZhcmlhYmxlcyovCi8qCnZhciBkaXNxdXNfY29uZmlnID0gZnVuY3Rpb24gKCkgewp0aGlzLnBhZ2UudXJsID0gUEFHRV9VUkw7ICAvLyBSZXBsYWNlIFBBR0VfVVJMIHdpdGggeW91ciBwYWdlJ3MgY2Fub25pY2FsIFVSTCB2YXJpYWJsZQp0aGlzLnBhZ2UuaWRlbnRpZmllciA9IFBBR0VfSURFTlRJRklFUjsgLy8gUmVwbGFjZSBQQUdFX0lERU5USUZJRVIgd2l0aCB5b3VyIHBhZ2UncyB1bmlxdWUgaWRlbnRpZmllciB2YXJpYWJsZQp9OwoqLwooZnVuY3Rpb24oKSB7IC8vIERPTidUIEVESVQgQkVMT1cgVEhJUyBMSU5FCnZhciBkID0gZG9jdW1lbnQsIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwpzLnNyYyA9ICdodHRwczovL2h0dHBzLXNiYWxjaS1naXRodWItaW8uZGlzcXVzLmNvbS9lbWJlZC5qcyc7CnMuc2V0QXR0cmlidXRlKCdkYXRhLXRpbWVzdGFtcCcsICtuZXcgRGF0ZSgpKTsKKGQuaGVhZCB8fCBkLmJvZHkpLmFwcGVuZENoaWxkKHMpOwp9KSgpOwo8L3NjcmlwdD4KPG5vc2NyaXB0PlBsZWFzZSBlbmFibGUgSmF2YVNjcmlwdCB0byB2aWV3IHRoZSA8YSBocmVmPSJodHRwczovL2Rpc3F1cy5jb20vP3JlZl9ub3NjcmlwdCI+Y29tbWVudHMgcG93ZXJlZCBieSBEaXNxdXMuPC9hPjwvbm9zY3JpcHQ+CgotLS0KCgoKCgoKCgo=